﻿using SD.App.Desktop.Entity;
using SD.App.Desktop.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SD.App.Desktop.Service
{
    /// <summary>
    /// 用户业务服务接口（封装用户相关业务逻辑）
    /// </summary>
    public interface IUserService
    {
        #region 核心业务：登录验证
        /// <summary>
        /// 用户登录验证（用户名+密码）
        /// </summary>
        /// <param name="username">用户名</param>
        /// <param name="plainPassword">明文密码</param>
        /// <returns>登录成功返回用户实体；失败返回 null</returns>
        Task<User?> LoginAsync(string username, string plainPassword);

        /// <summary>
        /// 验证密码正确性（对比明文密码与数据库加密密码）
        /// </summary>
        /// <param name="plainPassword">明文密码</param>
        /// <param name="encryptedPassword">数据库存储的加密密码</param>
        /// <returns>true：密码正确；false：密码错误</returns>
        bool VerifyPassword(string plainPassword, string encryptedPassword);
        #endregion

        #region 辅助业务：密码加密
        /// <summary>
        /// 密码加密（统一加密算法，与 VerifyPassword 对应）
        /// </summary>
        /// <param name="plainPassword">明文密码</param>
        /// <returns>加密后的密码（可直接存入数据库）</returns>
        string EncryptPassword(string plainPassword);
        #endregion

        #region 扩展业务：用户状态校验
        /// <summary>
        /// 检查用户是否已激活
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <returns>true：已激活；false：未激活/用户不存在</returns>
        Task<bool> CheckUserActiveAsync(long userId);

        /// <summary>
    
        #endregion    /// 激活用户账号
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <returns>true：激活成功；false：激活失败</returns>
        Task<bool> ActivateUserAsync(long userId);

        #region 新增密码重置功能
        /// <summary>
        /// 申请密码重置（生成临时令牌，发送验证信息）
        /// </summary>
        /// <param name="username">用户名</param>
        /// <param name="email">注册邮箱（用于接收重置链接）</param>
        /// <returns>临时令牌（用于后续验证）</returns>
        Task<string> ApplyPasswordResetAsync(string username, string email);

        /// <summary>
        /// 验证重置令牌有效性
        /// </summary>
        /// <param name="username">用户名</param>
        /// <param name="token">临时令牌</param>
        /// <returns>true：有效；false：无效/过期</returns>
        Task<bool> VerifyResetTokenAsync(string username, string token);

        /// <summary>
        /// 重置密码（验证令牌后执行）
        /// </summary>
        /// <param name="username">用户名</param>
        /// <param name="token">临时令牌</param>
        /// <param name="newPlainPassword">新明文密码</param>
        /// <returns>true：重置成功；false：失败</returns>
        Task<bool> ResetPasswordAsync(string username, string token, string newPlainPassword);
        #endregion

        #region 新增注册功能
        /// <summary>
        /// 用户注册（含参数校验、用户名唯一性校验、密码加密）
        /// </summary>
        /// <param name="registerDto">注册参数（用户名、密码、邮箱等）</param>
        /// <returns>注册成功返回用户实体；失败返回 null</returns>
        Task<User?> RegisterAsync(RegisterDto registerDto);

        /// <summary>
        /// 校验用户名是否已存在
        /// </summary>
        /// <param name="username">用户名</param>
        /// <returns>true：已存在；false：不存在</returns>
        Task<bool> IsUsernameExistsAsync(string username);

        /// <summary>
        /// 校验密码复杂度（新增辅助方法）
        /// </summary>
        /// <param name="plainPassword">明文密码</param>
        /// <returns>true：符合要求；false：不符合</returns>
        bool ValidatePasswordComplexity(string plainPassword);
        #endregion
    }
}
